package com.test36_注解;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

/**
 * 反射获取Annotation
 */
public class Demo01_Annotation {

    public static void main(String[] args) throws Exception {
        {
            System.out.println("--------- 获取IMessage接口上的注解信息 ---------");
            Class<?> clazz = IMessage.class;
            for (Annotation annotation : clazz.getAnnotations()) {
                System.out.println(annotation);
            }
        }
        {
            System.out.println("--------- 获取IMessage子类上的注解信息 ---------");
            Class<?> clazz = MessageImpl.class;
            for (Annotation annotation : clazz.getAnnotations()) {
                System.out.println(annotation);
            }
        }
        {   // 不是所有定义在结构上的Annotation都可以随意进行获取
            // 只有运行时注解才可以获取，@Override仅在源代码编译时生效
            System.out.println("--------- 获取IMessage.echo()方法上的注解信息 ---------");
            Class<?> clazz = MessageImpl.class;
            Method method = clazz.getDeclaredMethod("echo", String.class);
            for (Annotation annotation : method.getAnnotations()) {
                System.out.println(annotation);
            }
        }
    }
}

@FunctionalInterface    // 函数式接口
@Deprecated     // 此接口不推荐使用
interface IMessage {
    public String echo(String msg);
}

@Deprecated
class MessageImpl implements IMessage {
    @Override
    public String echo(String msg) {
        return "【ECHO】" + msg;
    }
}
